As memory becomes less expensive, an increasing number of databases may fit in a computer's main memory. These in-memory databases typically have been managed by relational database management systems (“RDBMS.”) However, RDBMS performance is limited even with large amounts of main memory. In particular, a program may need to translate an application's object representation of data (e.g., Java™ object representation) into and out of a relational representation for the relational database. In addition, RDBMSs generally cache databases on database servers, requiring several layers of software and network protocol to access from an application. Data is typically not cached in the same virtual memory as the application, except for small or short-lived caches in a database driver. Further, a RDBMS is typically optimized for data on disk, not in memory. For example, a typical RDBMS uses b-trees, database pages, locking, and logging. These are optimized to minimize disk access rather than central processing unit (“CPU”) time or memory space.
Another problem with traditional RDBMS caches is update speed. There is a bottleneck in the requirement to write through to the backing database when a transaction is committed to the backing database. The data must be transferred from the client that made the update all the way through to the server's disk before acknowledging the commit.